-
Notifications
You must be signed in to change notification settings - Fork 138
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: remove legacy_ibc_testing (rebased on main) #1185
chore: remove legacy_ibc_testing (rebased on main) #1185
Conversation
Hey, thanks for rebasing and re-surfacing this issue! We are evaluating how to proceed with this. I'm unsure if we should push for changes to ibc-go/testing. Since This ties into multiple aspects of testing in ICS, so we have to keep this in the repo (and working) for now. There is a bigger testing refactor underway, this will also be included in the refactor. Thanks again! |
OK no problem @MSalopek I understand. Thanks for your response. Just out of curiosity, what are the other shims you're talking about? The only one I know is the one that implies that tiny patch to |
I see. I may be working with some outdated info on my part and all tests seem to pass with your changes and IBC fork. Apologies for that! Any chance we can actually override the problematic function in ICS instead of making changes to ibc-go? I'm asking because I can't tell how long until something gets into an ibc-go release. // QueryConsensusStateProof performs an abci query for a consensus state
// stored on the given clientID. The proof and consensusHeight are returned.
func (chain *TestChain) QueryConsensusStateProof(clientID string) ([]byte, clienttypes.Height) {
clientState := chain.GetClientState(clientID) Can't we just inherit from Does that seem feasible? Btw thanks for the great work! |
From what I tried initially, that didn't seem feasible, but I can have a second look. On the other hand, we can ask the IBC team to see if this is something they can integrate quickly. The last time I ran the tests on their repo, the patch hadn't break anything. |
I'll get back to you with that one. We'll need to wait for a release though, but that's not a big problem. |
@tbruyelle Can you open a PR to ibc-go with changes you suggested and implemented on a fork and link it here? I can help elaborating with why changes are required. |
@MSalopek Great, I opened a PR here cosmos/ibc-go#4315 🙏 |
b38ba53
to
14bb349
Compare
@MSalopek I rebased again on master and applied the cosmos/ibc-go patch that should be shipped in 7.2.1. Everything runs fine on my machine, but the CI complains about e2e test fail. Can you rerun the job (I don't have that permission), that sounds flaky. Thx! |
@MSalopek Good news, ibc-go 7.2.1 has been released, and it contains the fix required to make the tests pass in this PR. As a result all tests are green, I remove the draft status and it is ready to review and merge \o/. |
Seems like ibctesting.GenerateKeys can returns keys in different orders when test cover is enabled.
Also fix panic in TestRedelegationNoConsumer
014f057
to
cdb43f9
Compare
Awesome! I'll review this and progress with the changes. Thank you very much! |
I've rebased on main so now the ibc-go version is 7.3.0, but it still contains the required fix. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great overall and I really support this work! Just some small comments
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
approved!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you very much for these changes and for following up with changes in ibc-go
.
Approve!
* build(deps): bump actions/checkout from 3 to 4 (#1257) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps)!: bump github.com/cosmos/ibc-go/v7 from 7.2.0 to 7.3.0 (#1258) * build(deps): bump github.com/cosmos/ibc-go/v7 from 7.2.0 to 7.3.0 Bumps [github.com/cosmos/ibc-go/v7](https://github.com/cosmos/ibc-go) from 7.2.0 to 7.3.0. - [Release notes](https://github.com/cosmos/ibc-go/releases) - [Changelog](https://github.com/cosmos/ibc-go/blob/main/CHANGELOG.md) - [Commits](cosmos/ibc-go@v7.2.0...v7.3.0) --- updated-dependencies: - dependency-name: github.com/cosmos/ibc-go/v7 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * add changelog entries --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: mpoke <[email protected]> * build(deps): bump github.com/cosmos/cosmos-sdk from 0.47.4 to 0.47.5 (#1259) * build(deps): bump github.com/cosmos/cosmos-sdk from 0.47.3 to 0.47.5 Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.47.3 to 0.47.5. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md) - [Commits](cosmos/cosmos-sdk@v0.47.3...v0.47.5) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> * add changelog entries --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: mpoke <[email protected]> * chore: Separate semver (#1217) separate semver * docs: cleanup changelog (#1260) fix changelog * fix!: validate MsgTransfer before calling Transfer() (#1244) * validate MsgTransfer * add TestSendRewardsToProvider * update DefaultConsumerUnbondingPeriod to 14 days * update changelog * fix linter * fix test * apply review suggestions * update changelog * docs: Create adr-012-separate-releasing.md (#1229) * Create adr-011-separate-releasing.md * Update docs/docs/adrs/adr-011-separate-releasing.md Co-authored-by: Philip Offtermatt <[email protected]> * adr 12 not 11 * correct that we use postfix not prefix * explanation on example release flow --------- Co-authored-by: Philip Offtermatt <[email protected]> * fix: remove addr validation for provider fee pool addr param (#1262) * fix: remove validation for provider chain address since we cannot validate it properly on consumer * add changelog entry * docs: update CHANGELOG.md for `v3.2.0-consumer` release (#1268) * Update CHANGELOG.md * Update CHANGELOG.md * chore: remove legacy_ibc_testing (rebased on main) (#1185) * chore: remove legacy_ibc_testing * fix import * introduce provider.UnmarshalConsumerPacketData * use patched ibc-go * fix annoying import order * test: ignore key ordering Seems like ibctesting.GenerateKeys can returns keys in different orders when test cover is enabled. * fix after rebase * replace allinbits/ibc-go with patched cosmos/ibc-go Also fix panic in TestRedelegationNoConsumer * fix lint * use released ibc-go 7.3.0 * add newPacketFromConsumer/Provider helper funcs * constructPacket method return ccv type instead of []byte * tests: increase timeout in nightly e2e for multiconsumer (#1272) * test: Add light client attack to e2e tests (#1249) * Add light client attack to e2e tests * Add details about the attack types * Rename validatorAddress to validatorPrivateKeyAddress * Add URL to CometMock to flag * Improve wording for light client attack run * Add submitting equivocation proposals and change consu->consumerName * build(deps): bump google.golang.org/grpc from 1.57.0 to 1.58.0 (#1284) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.57.0 to 1.58.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](grpc/grpc-go@v1.57.0...v1.58.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: update mergify and dependabot for v2.x-lsm (#1281) update mergify and dependabot for v2.x-lsm * build(deps): bump github.com/oxyno-zeta/gomock-extra-matcher from 1.1.0 to 1.2.0 (#1286) build(deps): bump github.com/oxyno-zeta/gomock-extra-matcher Bumps [github.com/oxyno-zeta/gomock-extra-matcher](https://github.com/oxyno-zeta/gomock-extra-matcher) from 1.1.0 to 1.2.0. - [Release notes](https://github.com/oxyno-zeta/gomock-extra-matcher/releases) - [Changelog](https://github.com/oxyno-zeta/gomock-extra-matcher/blob/master/release.config.js) - [Commits](oxyno-zeta/gomock-extra-matcher@v1.1.0...v1.2.0) --- updated-dependencies: - dependency-name: github.com/oxyno-zeta/gomock-extra-matcher dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat!: provider proposal for changing reward denoms (#1280) * new provider prop type * add methods and tests for new prop, update docs * remove old tx, fix tests * e2e handling * fix command type * boilerplate * fix e2e tests * Update CHANGELOG.md * lint * validate denoms * Update proposal.go * rm msg string * fix tests * rm chain in change denom action * lint * test for invalid denom * events for both add and remove * Update proposal_test.go * docs: introduce ADR on slashing on the provider chain (#1252) * initial draft of the adr * small change on intro.md to avoid huge diff * clean up * take into account Marius' comments * rewrite v0.47 Cosmos SDK link because it was returning 404 and redirecting * more cleaning up * update based on comments * removed confusing sentence on voting power * add missing ADRs in the intro file * add tokens to power conversion * add paragraph on key pruning and references to light-client attacks code * Update template title * Took into account comments. * augment pseudocode to skip redelegation/undelegation entries * fix identation issue --------- Co-authored-by: Karolos Antoniadis <[email protected]> * ci: update mergify and dependabot for v3.2.x-consumer (#1297) * update ymls * add newline --------- Co-authored-by: mpoke <[email protected]> * ci: update bots for v2.1.x-provider-lsm (#1305) update bots for v2.1.x-provider-lsm * Fix `build` in makefile (#1303) fix build in makefile * refactor: Vaguely named consumer structs (#1288) * Rename GenesisState proto * make proto-gen * proto rename: Params -> ConsumerParams * make proto-gen * App, fix type change for Param renaming * App, fix type change for GenesisState renaming * Fix unit-tests for GenesisState renaming * Fix unit-tests for Params renaming * Addressed review comments * Fix linter issues * build(deps): bump google.golang.org/grpc from 1.58.0 to 1.58.1 (#1306) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.58.0 to 1.58.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](grpc/grpc-go@v1.58.0...v1.58.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat: increment consensus ver and register migration (#1295) * increment consensus ver and register migration * Update CHANGELOG.md * Update migration.go * Update module.go * tests: Export struct fields in the e2e tests (#1313) * Make struct fields in e2e exported * Un-capitalize binary name * Remove prop type * Channel to channel in comments --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: mpoke <[email protected]> Co-authored-by: Philip Offtermatt <[email protected]> Co-authored-by: Dmitry Kolupaev <[email protected]> Co-authored-by: Thomas Bruyelle <[email protected]> Co-authored-by: MSalopek <[email protected]> Co-authored-by: insumity <[email protected]> Co-authored-by: Karolos Antoniadis <[email protected]> Co-authored-by: Simon Noetzlin <[email protected]> Co-authored-by: bernd-m <[email protected]>
Description
Closes: #1008
This is a rebase of #1003 (which was on the
sdk47
branch) to themain
branch. It contains the same set of changes, so I chose to copy the PR body here to avoid reviewers to deal with 2 PRs.This is also a draft PR because to be merged this requires a small change in ibc-go. But unlike the old PR, I added a
replace
directive in thego.mod
so it uses a patched version of ibc-go, to show that the tests are passing.If you support this change, I can make a PR on ibc-go (7.1 release branch), and once it is accepted, we can merge it.
Original PR body
As indicated in the code comments of the
legacy_ibc_testing
folder, this folder was meant to be removed following the IBC upgrade. In the context of the IBC v7 upgrade, I decided to tackle this task.The process was not as straightforward as anticipated, because the
legacy_ibc_testing
is not merely a copy of theibc-go/testing
folder. It contains numerous adaptations related to ICS. I managed to address all of them except one, which is why some tests still fail, all for the same reason (see the valset/header update order section for details).Here is a list of changes, categorized into three sections for easier readability: Minor changes, Consumer genesis updates, Packet sniffing, and finally, Valset/header update order.
Minor changes
legacy_ibc_testing
folder, replace all imports fromgithub.com/cosmos/interchain-security/legacy_ibc_testing
togithub.com/cosmos/ibc-go/v7/testing
.ibctesting.NewTestChain
no longer accepts theappIniter
. This must be assigned toibctesting.DefaultTestingAppInit
before callingNewTestChain
(see documentation).endpoint.SendPacket
API now requires packet data and timeout values instead of a packet (see related PR).ibctesting.TestingApp.GetStakingKeeper()
no longer gives access toUnbondingTime()
method: replace withGetTestStakingKeeper()
.ibcsimapp.CreateTestPubKeys
byibctesting.GenerateKeys
icstestingutil.ReconstructPacket
byibctesting.ParsePacketFromEvents()
ibctesting.GetChainID()
now returns by default a chainID with a revision, which wasn't expected by the tests. Disable it by settingibctesting.ChainIDSuffix = ""
.Consumer genesis updates
In consumer chains, the validator set is not expected to be find in the
staking
module, but rather in theconsumer
module. This was previously handled inSetupWithGenesisValSet
, which feeds the consumer genesis with the valset passed in parameters.With the removal of
legacy_ibc_testing
, it's no longer possible to adaptSetupWithGenesisValSet
in this way. Therefore, I adopted a different approach. I modified the consumer and consumer-democracy appIniter to accept a valset parameter (I introduced avalSetAppIniter
), and they populate their genesis from this valset (sinceappIniter
also returns the genesis).When calling consumer
appIniter
, the provider valset is passed in parameters, while when calling consumer-democracyappIniter
, the valset created in the test is passed.Similarly,
SetupWithGenesisValSet
expects astaking
module entry in the genesis, which is not the case for a consumer chain. This was previously handled by checking if astaking
entry was present in the genesis (see here). For the same reason, I had to find a workaround, and so I also updated the consumer appIniter so its genesis contains a placeholderstaking
entry.Packet sniffing
The
legacy_ibc_testing
was adapted to record all packets in a map field ofTestChain
(see here). This field doesn't exist in theibc-go/v7/testing
, so I updated theCCVTestSuite
struct to add aStreamingService
implementation calledpacketSniffer
to all created chains. ThepacketSniffer
listens toEndBlock
and appends all packets parsed from events.Valset/header update order
In
legacy_ibc_testing
, theTestChain.NextBlock
looks like that :In
ibc-go/v7/testing
, it's a little different :The validators are updated after the
chain.LastHeader
update, which makes theUpdateClient
call fail, because the trusted validators hash doesn't match the consensus state next validators hash (can't give more explanations because I lack knowledge on IBC).If we change the order like it was in
legacy_ibc_testing
theUpdateClient
works well.For this one I wasn't able to find a workaround, probably a PR should be submitted to
ibc-go
to change that order. I ran theibc-go
tests with that change and there's still green, so that looks fine. Or else maybe someone can find a workaround ?Author Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.
I have...
!
to the type prefix if state-machine breaking change (i.e., requires coordinated upgrade)CHANGELOG.md
Reviewers Checklist
All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.
I have...
!
in the type prefix if API or client breaking change